2007年07月07日
川俣晶の縁側ソフトウェア技術雑記 total 5435 count

System.Windows.Forms.PanelクラスのAutoScrollプロパティで表示されたスクロールバーをキーボードで操作する方法はあるか?

Written By: 川俣 晶連絡先

 .NET FrameworkのSystem.Windows.Forms.Panelクラスは、AutoScrollプロパティをtrueにすることによって、自動的にスクロールバーを付けることが出来ます。

 また、このクラスはコンテナであるため、フォーカスを持つことがありません。

 さて、ここで問題です。

 このスクロールバーをキーボードで操作する方法はあるでしょうか?

 ……現状で答は無し。

根拠のない感想文 (妥当な解釈であるかは知らないよ!) §

 PanelクラスのAutoScrollプロパティが存在する目的は、たとえば巨大な画像データをスクロールバーを付けて閲覧するため……等「ではない」。

 そうではなく、サイズ変更可能なフォームでユーザーが過剰に小さくフォームを小さくした場合等に操作可能にするため。

 たとえば、フォーム上にPanelを貼り付け、Anchorプロパティを四方に設定する。そして、PanelのAutoScrollプロパティをtrueにした上で、Panel上にコントロールを配置する。

 このフォームを実行中にユーザーがサイズを小さく変更したとき、スクロールバー操作で全てのコントロールを見て操作できる。

 さて、このようなフォームをキーボードで操作するときには、キーボードの操作は全て個々のコントロールが受け取るのが前提となる。従って、スクロール操作のために使えるキー操作は存在しない。しかし、Tabキーによるフォーカス移動はできる。Panelの自動スクロール機能は、フォーカスを持ったコントロールが常に見えるようにスクロール位置を調整してくれるので、Tabキーさえ使えば全てのコントロールを見て操作できる。

 つまり、スクロール位置を明示的に操作するキー操作が存在しないことは問題ではないし、その方が妥当な仕様である。

 逆に言えば、見える範囲を超えるような巨大なコントロールを貼り付けるべきではない。それは、このアーキテクチャでは上手く処理できない。